import axios from 'axios'
import store from '../store'
import router from '../router'
import { Message } from 'element-ui'

export const baseUrl = 'http://big-event-vue-api-t.itheima.net'

// 创建自定义axios函数
const request = axios.create({
  // 请求基地址
  baseURL: baseUrl
})

// 请求白名单
const whiteAPIList = ['/api/reg', '/api/login']
// 定义axios请求拦截器
request.interceptors.request.use((config) => {
  // config配置对象(请求的后台参数,都在这个对象身上)
  // 为请求头挂载 Authorization 字段
  if (!whiteAPIList.includes(config.url)) {
    config.headers.Authorization = store.state.token
  }
  return config
}, (error) => {
  // 请求异常会直接进入这里,类似于catch
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(response => {
  // 响应状态码为 2xx,3xx 时触发成功的回调，形参中的 response 是“成功的结果”
  return response
}, error => {
  // 响应状态码不是 2xx,3xx 时触发失败的回调，形参中的 error 是“失败的结果”
  // 本次响应token过期
  store.commit('UpdateToken', '')
  store.commit('UpdateUserInfo', {})
  Message.error('身份已过期,请重新登录!')
  router.push('/login')
  return Promise.reject(error)
})

export default request
